<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // ES6类里的私有成员 
        // 类的内部可以使用 ，外部不能调用 

        // ES5 模拟私有

        // function Person(name,age){
        //     var _weight = "90kg";  // 私有属性
        //     this.name = name;
        //     this.age = age;
        // }
        // __proto__

        // var zhangsan = new Person("张三",20)
        // console.log(zhangsan._weight);


        // ES6类里的私有成员 ： 通过 # 修饰符修饰 ；
        // 私有成员 ： 私有属性 私有方法；
        // 默认 就是公有成员   加上 # 私有成员

        class Person{
            // 定义类的属性 ；
            // age = 20;   //  等同于  在 constructor 里 this.age = 20;
            // 定义一个私有属性 
            #weight = "90kg";  // 只能在类的内部使用 ，不能在外部使用 
            constructor(){
                this.name = "张三";
                // this.age = 20;
            }
            fn(){
                console.log("fn");
            }
            // 方法 
            // 公有方法 调用私有属性；
            getWeight(){
                // 获取体重 
                return this.#weight;
            }
            #privateFn(){   // 私有方法 
                console.log("私有方法")
            }
            getFn(){  // 公有方法调用私有方法；
                this.#privateFn();
            }
        }

        let zhangsan = new Person();
        // console.log(zhangsan);

        // 实例化之后调用  weight ；
        // console.log(zhangsan.#weight); // 外部调用私有属性 ，不能调用
    //    console.log( zhangsan.getWeight());
    // zhangsan.#privateFn();
    zhangsan.getFn();


    </script>
</body>
</html>